package com.eat.demo;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class OrderDao {
	Scanner input = new Scanner(System.in);
	List<Order> orderList = new ArrayList<Order>();
	Dishes[] dish = init();

	/**
	 * 开启点餐系统
	 */
	public void startOrder() {
		while (true) {
			System.out.println("欢迎使用吃货联盟订餐系统");
			System.out.println("******************");
			System.out.println("1.我要订餐");
			System.out.println("2.查看餐袋");
			System.out.println("3.签收订单");
			System.out.println("4.删除订单");
			System.out.println("5.我要点赞");
			System.out.println("6.退出系统");
			System.out.println("******************");
			System.out.print("请选择服务项目：");
			int choose = input.nextInt();
			switch (choose) {
			case 1:
				System.out.println("***我要订餐***");
				orderDish();
				continue;
			case 2:
				System.out.println("***查看餐袋***");
				showOrder();
				continue;
			case 3:
				System.out.println("***签收订单***");
				signOrder();
				continue;
			case 4:
				System.out.println("***删除订单***");
				deletOrder();
				continue;
			case 5:
				doPraise();
				continue;
			case 6:
				System.out.println("谢谢您的使用，系统已退出");
				System.exit(1);
			default:
				System.out.println("暂未开通其他功能，请重新选择");
			}
		}
	}

	
	/**
	 * 随机生成4位数字的订单编号
	 * @return 订单编号(String)
	 */
	public String makeNum() {
		Random random = new Random();
		StringBuffer id = new StringBuffer();
		//
		for (int i = 0; i < 4; i++) {
			//生成0~9之间的随机数
			int num = random.nextInt(10);
			//拼接每次生成的随机数
			id.append(num);
		}
		return id.toString();
	}
	
	/**
	 * 初始化菜单
	 * @return 菜单内容
	 */
	public Dishes[] init(){
		Dishes[] dish = new Dishes[4];
		dish[0] = new Dishes("鱼香肉丝",25,0);
		dish[1] = new Dishes("红烧鲫鱼",35,0);
		dish[2] = new Dishes("麻辣香锅",45,0);
		dish[3] = new Dishes("清炒时蔬",15,0);
		return dish;
	}
	
	/**
	 * 显示菜单内容
	 */
	public void showMenu(){
		System.out.println("我们的菜单：");
		System.out.println("菜名\t价格\t点赞数");
		for(Dishes dishes : dish){
			System.out.println(dishes.getName() + "\t" + dishes.getPrice() + "\t" + dishes.getPraise());
		}
	}

	/**
	 * 我要订餐		
	 */
	public void orderDish() {
		Order order = new Order();
		showMenu();
		System.out.println("请选择菜品:");
		String dishName = input.next();
		//设置订单菜品名称
		order.setDishName(dishName);
		//得到菜品单价
		int dishPrice = 0;
		for(Dishes dishes : dish){
			if(dishes.getName().equals(dishName)){
				dishPrice = dishes.getPrice();
				break;
			}
		}
		System.out.println("请输入份数：");
		//设置订单菜品份数
		order.setCount(input.nextInt());
		//订单总金额 = 单价*数量
		int totalPrice = dishPrice * order.getCount();
		//设置订单菜品总价
		order.settotalPrice(totalPrice);
		System.out.println("请输入订餐人姓名：");
		//设置订餐人
		order.setName(input.next());
		System.out.println("请输入送餐时间：10~20点配送");
		int time = input.nextInt();
		//当time > 20 || time < 10 不在配送时间内，用户需要输入合法时间，直到输入正确停止输入
		while (time > 20 || time < 10) {
			System.out.println("不在配送时间内，请重新输入配送时间");
			time = input.nextInt();
		}
		//设置配送时间
		order.setTime(time);
		System.out.println("请输入配送地址：");
		//设置配送地址
		order.setAddress(input.next());
		//设置订单编号
		order.setOrderID(makeNum());
		//设置初始状态
		order.setStatus("已预订");
		//将订单存入集合
		orderList.add(order);
		System.out.println("点餐成功");
		returnTo(1);
	}
	/**
	 * 查看餐袋
	 */
	public void showOrder() {
		//订单集合不为空	
		if (orderList.size() != 0) {
			System.out
					.println("订单编号     订餐人     菜品名称     菜品份数     订单总额     订单状态");
			//使用增强型for循环遍历集合得到每个订单的相关属性
			for (Order order : orderList) {
				System.out.println(order.getOrderID() +"\t"+ order.getName()+"\t"
						+ order.getDishName() +"\t"+ order.getCount()+"\t"
						+ order.gettotalPrice()+"\t" + order.getStatus());
			}
			//订单集合为空	
		} else {
			System.err.println("还没有订单哦无法查看餐袋，快去订餐吧！");
		}

	}

	
	/**
	 * 签收订单
	 * 订单状态为已预订时才可签收
	 */
	public void signOrder() {
		//订单集合不为空	
		if(orderList.size() != 0){
			showOrder();
			System.out.println("请输入需要签收的订单号：");
			String id = input.next();
			Order order =  hasOrder(id);
			//存在该订单且状态为预订
			if(order != null && order.getStatus().equals("已预订")){
				//修改订单状态
				order.setStatus("已完成");
				System.err.println("签收成功");
				
				//存在该订单且状态为完成
			}else if(order != null && order.getStatus().equals("已完成")){
				System.err.println("订单已签收，不可重复签收哦");
			
				//订单不存在
			}else{
				System.err.println("未找到该订单，无法签收");
			}
		//订单集合为空	
		}else{
			System.err.println("还没有订单无法签收订单哦，快去订餐吧！");
		}
		returnTo(3);
	}
	/**
	 * 删除订单
	 */

	//删除订单
	public void deletOrder() {
		//订单集合不为空
		if(orderList.size() != 0){			
			showOrder();
			System.out.println("请选择需要删除的订单编号：");
			String id = input.next();
			Order order = hasOrder(id);
			if(order != null && order.getStatus().equals("已预订")){
				orderList.remove(order);
				System.out.println("订单删除成功");
			}else if(hasOrder(id)!= null && order.getStatus().equals("已完成")){
				System.out.println("已完成状态下无法删除订单");
			}else{
				System.out.println("未找到该订单！");
			}
			//订单集合为空
		}else{
			System.out.println("还没有订单无法删除哦，快去订餐吧");
		}
		returnTo(4);
	}


	/**
	 * 根据订单编号找到对应对的订单
	 * @param id 订单编号
	 * @return 订单对象
	 */
	public Order hasOrder(String id){
		//遍历集合中所有订单，当ID相等时返回该订单
		for(Order order : orderList){
			if(order.getOrderID().equals(id)){
				return order;
			}
		}
		return null;
	}
	/**
	 * 我要点赞
	 */
	public void doPraise(){
		showMenu();
		System.out.println("请选择需要点赞的菜品：");
		String chooseName = input.next();
		for(Dishes dishes : dish){
			//找到相应菜品，在原点赞数上+1
			if(dishes.getName().equals(chooseName)){
				dishes.setPraise(dishes.getPraise()+1);
				System.out.println("点赞成功");
				break;
			}
		}
		returnTo(5);
	}
	/**
	 * 跳转
	 * @param params
	 */
	public void returnTo(int params){
		System.out.println("输入Y继续,其他任意键返回主菜单");
		String choose = input.next();
		if (choose.equalsIgnoreCase("Y")) {
			switch(params){
			case 1:
				orderDish();
				break;
			case 2:
				showOrder();
				break;
			case 3:
				signOrder();
				break;
			case 4:
				deletOrder();
				break;
			case 5:
				doPraise();
				break;
			}
		}
	}
}
